home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 050 / tpstuff2.arc / DISKSTUS.PAS < prev    next >
Pascal/Delphi Source File  |  1984-12-02  |  3KB  |  82 lines

  1.  
  2. program ShowDiskStatus;
  3.  
  4. {
  5.        ShowDiskStatus uses MSDos and the functions therein to get
  6.        Drive information on either the current Drive or the Drive
  7.        specified on the command line.
  8. }
  9. {$I-,U-,C-}
  10.  
  11. type                            { TYPE declarations }
  12.   RegRec =
  13.     record           { register pack Used in MSDos call }
  14.       AX, BX, CX, DX, BP, SI, DI, DS, ES, Flags : Integer;
  15.     end;
  16.  
  17. var
  18.   Tracks,                              { number of available Tracks }
  19.   TotalTracks,                         { number of total Tracks }
  20.   Drive,                               { Drive number }
  21.   Bytes,                               { number of Bytes in one sector }
  22.   Sectors              : Integer;      { number of total Sectors }
  23.   Used,TotalBytes      : Real;
  24.   Regs                 : RegRec;
  25.  
  26.  
  27. procedure DiskStatus( Drive : integer;  var Tracks, TotalTracks,
  28.                       Bytes, Sectors : integer );
  29. {
  30.        makes MSDos call to read status of Drive; returns data
  31.        in Tracks, TotalTracks, Bytes, and Sectors
  32. }
  33. begin
  34.   Regs.AX := $3600;               { Get Disk free space }
  35.   Regs.DX := Drive;               { Store Drive number }
  36.   MSDos( Regs );                  { Call MSDos to get disk info }
  37.   Tracks := Regs.BX;              { Get number of Tracks Used }
  38.   TotalTracks := Regs.DX;         {  "    "    "  total Tracks }
  39.   Bytes := Regs.CX;               {  "    "    "  Bytes per sector }
  40.   Sectors := Regs.AX              {  "    "    "  Sectors per cluster }
  41. END; { of proc DiskStatus }
  42.  
  43. function DefaultDrive : integer;
  44. {
  45.        makes MSDos call to find out what current default drive is
  46. }
  47. var
  48.   Regs : RegRec;
  49. begin
  50.   Regs.AX := $1900;                      { Get current Drive number }
  51.   MSDos( Regs );                         { Call MSDos }
  52.   DefaultDrive := (Regs.AX and $FF) + 1  { Return value via function }
  53. END; { of func DefaultDrive }
  54.  
  55. begin { main body of program ShowDiskStatus }
  56.   Drive := 0;                             { Initialize Drive }
  57.   If (Mem[Cseg:$80]) > 0                  { Get command line }
  58.     then Drive := Mem[Cseg:$82] and $1F;
  59.   If not ( Drive in [ 1..6 ] )            { If nothing on command line }
  60.     then Drive := 0;                      { or bad drive specified, then }
  61.                                           { then logged drive }
  62.   DiskStatus( Drive, Tracks, TotalTracks, Bytes, Sectors );
  63.   WriteLn;
  64.   WriteLn;
  65.   Write( '       ' );
  66.   If ( Drive = 0 ) then
  67.     Drive := DefaultDrive;
  68.   WriteLn( 'DSCST on Drive ', chr( Drive + $40 ), ':');
  69.   WriteLn;
  70.   { Write disk information }
  71.   WriteLn( Tracks:7, '  available tracks.' );
  72.   WriteLn( TotalTracks:7, '  total tracks.' );
  73.   Used :=  (( TotalTracks - Tracks ) / TotalTracks ) * 100;
  74.   WriteLn( Used:7:2, '% used.' );
  75.   WriteLn( Sectors:7, '  sectors per cluster.' );
  76.   WriteLn( Bytes:7, '  bytes per sector.' );
  77.   TotalBytes := (( Sectors * Bytes * 1.0 ) * Tracks );
  78.   WriteLn( TotalBytes:7:0, '  total bytes available on disk.' );
  79.   WriteLn
  80. end. { of program ShowDiskStatus }
  81.  
  82.